【レポート】初めての機械学習から、Unity Sentisでの機械学習モデル利用方法までを1時間で学ぶ #CEDEC2023 #classmethod_game
データアナリティクス事業本部 機械学習チームの鈴木です。
CEDEC2023に参加してきました。 聴講したセッション『推論ライブラリを実装する』についてレポートします。
前半では機械学習の基礎的な考え方を非常に分かりやすくご紹介頂きました。後半はUnityを前提として、機械学習モデルを組み込みで利用する方法を紹介頂きました。機械学習と組み込みでの利用という異なる2つの専門知識について、どちらかについて初心者でも、全体を通してとても理解しやすいセッションでした。私は組み込みでの利用はあまり経験がないので、具体的にONNXランタイム向けにどのツールを使えばいいかや、Sentisを使ってどのように実装すればいいかご紹介頂いたので、ぜひ自分でもチャレンジしたいと思いました。
※ Sentisはセッション発表時点でExperimentalパッケージになります。
セッション概要
機械学習の成果がさまざまなところで社会を変えていますが、ゲーム開発を主業務として研鑽を積んできたエンジニアの方々の中には、「盛り上がってるみたいだけど、なんだかよくわからないんだよなぁ・・・」という方もいらっしゃるかと思います。
Unityはしばらく前から、ONNXモデルをゲーム機など幅広い環境で動作させるための推論ライブラリを実装しています。本セッションでは、ONNXとUnityが開発しているBarracudaを中心に、機械学習モデルについての概要や、推論ライブラリをゲーム機等で動作させるためにはどのようなことをする必要があるのか、という点について学ぶ初学者向けのセッションを目指します。一緒に機械学習について学んでいきましょう!
※ 『推論ライブラリを実装する』セッションページより引用
昨今、ものすごい勢いで機械学習の進歩が進んでおり、ゲーム業界でも活用が求められる機会が増えてきています。一方であまりにも進歩が速く、「盛り上がっているけど、使い方も分からないし困ったな」となっている方も多いと思います。そのような方向けに、まず機械学習の基本的な仕組みを非常に分かりやすく説明頂いた後、ONNX形式に変換した機械学習モデルをUnityのSentisで推論用途で利用する方法について、具体的なコードを踏まえてご解説頂きました。
ポイントと感じた点
私は機械学習の仕組みについては知見があるのですが、後半のONNX形式への変換とSentisでの利用のところがとても勉強になりましたので、その点についてご紹介します。
ONNXについて
モデルを好みの環境で作り、ONNX形式に変換することで、スマートフォンやゲーム機でモデルを実行できるようにする。 ONNX形式は、protobufでシリアライズされており、高速に動作ができる。
ONNX形式のモデルは、例えばNetronでグラフ化したものとして可視化できる。
なお、ONNXのドキュメントは以下。
Sentisについて
ONNXベースのモデルをUnityで実行するためのパッケージで、以下の特徴がある。
- 数多くのONNXのオペレータを実装している。
- Sentisでモデルのオペレータの整理のような最適化をすることもできる。
- マルチプラットフォームで推論できるように、多くのバックエンドタイプ(CPU実行・GPU実行など)の選択をサポートしている。
- 推論結果の取得は、コールバックを持たせることで計算終了後に非同期にすることも、実行終了後まで待つこともできる。
特にSentisを使うことで、デバイス上で実行する際にネックになるであろうモデルの最適化について、以下のように効率的に行うことができるのはとてもよいなと思いました。
- 意味のないレイヤーや重複しているレイヤーを見つけて整理する
- レイヤーやサブグラフの中に同様に機能するより簡素なレイヤーがあるなら置き換える
- 推論時にデータの読み取りが必要なレイヤーは CPUでどうさするようにする
感想
ONNXとSentisを使うことで、ONNXに変換可能な好きな環境・ライブラリで開発した機械学習モデルを、Unityで推論用途に利用できることが分かりました。
具体的な使い方としては、セッション内でも要点を解説頂きましたが、以下のSentisのマニュアルにサンプルのコードがあるため、使ってみたい方はご確認頂ければと思います。
Sentisを使って、組み込み環境での実行のため、機械学習モデルの最適化を行うことができるということもとても良いなと思いました。
モデルの最適化については、1日目の以下のセッションでも詳しく紹介されていました。デバイスでの発熱を抑えたりより効率の良いオペレータに置き換えることで、同じモデルでも数倍〜数十倍の速度差が出るのでした。
機械学習の知見がない方でも、このセッションを聞くことで基本的な仕組みを学び、そのままUnityでの活用方法まで一通りの流れが掴める、素晴らしいセッションだと思いました。
私としては、機械学習の知見はあるものの、ONNX形式に変換してSentisで動かすというゲーム用途を想定した利用イメージがついていなかったので、たった1時間のセッションでその筋道を学べたことに感動しました。ぜひ自分でも挑戦してみたいと思います……!